module clock(select_cnt, s_clk, clk_10hz, set, s_data, m_data, h_data, en, rst);
/*
 * select_cnt 模式选择:0表示显示，1表示设置分钟，2表示设置小时
 * s_lck 秒钟的时钟频率
 * set 增加m/h的数值用的时钟信号
 * s_data m_data h_data 秒、分、时的输出
 * en 使能信号
 * rst 复位信号
 */
input s_clk, clk_10hz, set, en, rst;
input[2:0] select_cnt;

output[7:0] s_data, m_data, h_data;

wire s_ov, m_ov, h_ov, m_clk, h_clk;
reg[4:0] cnt;
reg rapid;

cnt60 Second (.clk(s_clk), .rst(rst), .en(en), .dout(s_data), .ov(s_ov));	//秒钟
cnt60 Minute (.clk(m_clk), .rst(rst), .en(en), .dout(m_data), .ov(m_ov));	//分钟
cnt24 Hour   (.clk(h_clk), .rst(rst), .en(en), .dout(h_data), .ov(h_ov));	//时钟

//长时间按矫正时间：
always @(posedge clk_10hz)
begin 
	if(set) cnt = cnt + 1;
	else cnt = 0;
	if(cnt > 9) rapid = 1;
	else rapid = 0;
end

//(单点增加) | (长按增加)
assign m_clk = (select_cnt == 2'b01) ? (!rapid&set)|(rapid&clk_10hz) : s_ov;	//1：校分 
assign h_clk = (select_cnt == 2'b10) ? (!rapid&set)|(rapid&clk_10hz) : m_ov;	//2：校时


endmodule
